/**
 * 广告管理工具
 * 统一管理所有广告逻辑
 */

import { useAdStore } from '@/stores/ad'

let bannerAd = null
let interstitialAd = null
let rewardVideoAd = null
let nativeAd = null

/**
 * 初始化横幅广告
 * @param {string} adUnitId 广告位ID
 */
export function initBannerAd(adUnitId) {
  // #ifdef MP-WEIXIN
  bannerAd = uni.createBannerAd({
    adUnitId: adUnitId,
    style: {
      left: 0,
      top: 0,
      width: 320
    }
  })
  
  bannerAd.onLoad(() => {
    console.log('横幅广告加载成功')
  })
  
  bannerAd.onError((err) => {
    console.error('横幅广告加载失败:', err)
  })
  // #endif
  
  return bannerAd
}

/**
 * 显示横幅广告
 * @param {Object} options 配置选项
 */
export function showBannerAd(options = {}) {
  const adStore = useAdStore()
  
  // #ifdef MP-WEIXIN
  if (!bannerAd) {
    const adConfig = adStore.adConfig
    bannerAd = initBannerAd(adConfig.banner)
  }
  
  if (bannerAd) {
    bannerAd.show().catch(err => {
      console.error('横幅广告显示失败:', err)
    })
    adStore.recordAdShow('banner')
  }
  // #endif
  
  // #ifdef H5
  // H5 端可以在这里实现其他广告平台的集成
  console.log('H5端横幅广告展示')
  adStore.recordAdShow('banner')
  // #endif
}

/**
 * 隐藏横幅广告
 */
export function hideBannerAd() {
  // #ifdef MP-WEIXIN
  if (bannerAd) {
    bannerAd.hide()
  }
  // #endif
}

/**
 * 销毁横幅广告
 */
export function destroyBannerAd() {
  // #ifdef MP-WEIXIN
  if (bannerAd) {
    bannerAd.destroy()
    bannerAd = null
  }
  // #endif
}

/**
 * 初始化插屏广告
 * @param {string} adUnitId 广告位ID
 */
export function initInterstitialAd(adUnitId) {
  // #ifdef MP-WEIXIN
  interstitialAd = uni.createInterstitialAd({
    adUnitId: adUnitId
  })
  
  interstitialAd.onLoad(() => {
    console.log('插屏广告加载成功')
  })
  
  interstitialAd.onError((err) => {
    console.error('插屏广告加载失败:', err)
  })
  
  interstitialAd.onClose((res) => {
    console.log('插屏广告关闭:', res)
    const adStore = useAdStore()
    if (res && res.isEnded) {
      adStore.recordAdClick('interstitial')
    }
  })
  // #endif
  
  return interstitialAd
}

/**
 * 显示插屏广告
 */
export function showInterstitialAd() {
  const adStore = useAdStore()
  
  // #ifdef MP-WEIXIN
  if (!interstitialAd) {
    const adConfig = adStore.adConfig
    interstitialAd = initInterstitialAd(adConfig.interstitial)
  }
  
  if (interstitialAd) {
    interstitialAd.show().catch(err => {
      console.error('插屏广告显示失败:', err)
      // 如果广告未准备好，先加载
      if (err.errCode === 1004) {
        interstitialAd.load()
      }
    })
    adStore.recordAdShow('interstitial')
  }
  // #endif
  
  // #ifdef H5
  console.log('H5端插屏广告展示')
  adStore.recordAdShow('interstitial')
  // #endif
}

/**
 * 初始化激励视频广告
 * @param {string} adUnitId 广告位ID
 */
export function initRewardVideoAd(adUnitId) {
  // #ifdef MP-WEIXIN
  rewardVideoAd = uni.createRewardedVideoAd({
    adUnitId: adUnitId
  })
  
  rewardVideoAd.onLoad(() => {
    console.log('激励视频广告加载成功')
  })
  
  rewardVideoAd.onError((err) => {
    console.error('激励视频广告加载失败:', err)
  })
  
  rewardVideoAd.onClose((res) => {
    console.log('激励视频广告关闭:', res)
    const adStore = useAdStore()
    if (res && res.isEnded) {
      adStore.recordAdClick('rewardVideo')
      // 触发奖励回调
      if (onRewardCallback) {
        onRewardCallback()
        onRewardCallback = null
      }
    }
  })
  // #endif
  
  return rewardVideoAd
}

let onRewardCallback = null

/**
 * 显示激励视频广告
 * @param {Punction} onReward 奖励回调函数
 */
export function showRewardVideoAd(onReward) {
  const adStore = useAdStore()
  
  if (onReward) {
    onRewardCallback = onReward
  }
  
  // #ifdef MP-WEIXIN
  if (!rewardVideoAd) {
    const adConfig = adStore.adConfig
    rewardVideoAd = initRewardVideoAd(adConfig.rewardVideo)
  }
  
  if (rewardVideoAd) {
    rewardVideoAd.show().catch(err => {
      console.error('激励视频广告显示失败:', err)
      // 如果广告未准备好，先加载
      if (err.errCode === 1004) {
        rewardVideoAd.load().then(() => {
          rewardVideoAd.show()
        })
      }
    })
    adStore.recordAdShow('rewardVideo')
  }
  // #endif
  
  // #ifdef H5
  console.log('H5端激励视频广告展示')
  adStore.recordAdShow('rewardVideo')
  // 模拟奖励回调
  if (onReward) {
    setTimeout(() => {
      onReward()
    }, 1000)
  }
  // #endif
}

/**
 * 初始化原生广告
 * @param {string} adUnitId 广告位ID
 */
export function initNativeAd(adUnitId) {
  // #ifdef MP-WEIXIN
  nativeAd = uni.createNativeAd({
    adUnitId: adUnitId
  })
  
  nativeAd.onLoad((res) => {
    console.log('原生广告加载成功:', res)
  })
  
  nativeAd.onError((err) => {
    console.error('原生广告加载失败:', err)
  })
  // #endif
  
  return nativeAd
}

/**
 * 显示原生广告
 */
export function showNativeAd() {
  const adStore = useAdStore()
  
  // #ifdef MP-WEIXIN
  if (!nativeAd) {
    const adConfig = adStore.adConfig
    nativeAd = initNativeAd(adConfig.native)
  }
  
  if (nativeAd) {
    nativeAd.load()
    adStore.recordAdShow('native')
  }
  // #endif
  
  // #ifdef H5
  console.log('H5端原生广告展示')
  adStore.recordAdShow('native')
  // #endif
  
  return nativeAd
}

/**
 * 检查是否应该显示插屏广告
 * @param {number} browseCount 浏览计数
 * @param {number} lastInterstitialTime 上次插屏广告时间
 * @returns {boolean}
 */
export function shouldShowInterstitial(browseCount, lastInterstitialTime) {
  const adStore = useAdStore()
  const strategy = adStore.adStrategy
  
  const now = Date.now()
  const timeDiff = now - lastInterstitialTime
  
  return browseCount >= strategy.browseCount || timeDiff >= strategy.timeInterval
}

